home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-12-24 | 8.3 KB | 449 lines | [TEXT/PJMM] |
- unit Commands;
-
-
- interface
-
-
- uses
-
- Globals;
-
- procedure setdecimal;
-
- procedure clearscreen (var line: str255);
-
- procedure deletevariable (var savename: stringsize);
-
- procedure cleanupvariables;
-
- procedure createamatrix (var savename: stringsize; var mrows, ncols: longint; var kmat: longint);
-
- procedure readmatrix (var savename: stringsize);
-
- procedure readvariables;
-
- procedure listvariables;
-
- procedure storevariables;
-
-
- implementation
-
-
- procedure setdecimal;
-
- begin
- writeln('set number of decimal places to');
- write(blank);
- readln(decplace);
- decplaceplus10 := decplace + 10;
- end;
-
-
- procedure ClearScreen;
-
-
- var
- place: longint;
-
- begin
-
- place := pos(blank, line);
- while place <> 0 do
- begin
- delete(line, place, 1);
- place := pos(blank, line);
- end;
-
- place := pos('cls', line);
- delete(line, place, 4);
- if line <> '' then
- writeln('cls is a reserved word for clearing the screen');
- if line = '' then
- rewrite(output);
- end;
-
- procedure deletevariable;
-
- var
- i, j, k: longint;
- vRefNum: integer;
- err: OSErr;
- name: str255;
-
-
- begin
-
- for i := 1 to numvariables do
- begin
- j := numvariables + 1 - i;
- if strvar^^[j]^^ = savename then
- begin
- strvar^^[j]^^ := '';
- if matrixstoredinfile^^[j] then
- begin
- err := GetVol(@name, vRefNum);
- name := savename;
- err := FSDelete(name, vRefNum);
- matrixstoredinfile^^[j] := false;
- end;
- end;
- end;
-
- end;
-
-
-
- procedure cleanupvariables;
-
- var
- i, j, k, vRefNum: longint;
- savename: stringsize;
-
-
- begin
-
- for i := 1 to numvariables do
- begin
- j := numvariables + 1 - i;
- for k := 1 to j - 1 do
- if strvar^^[k]^^ = strvar^^[j]^^ then
- begin
- savename := strvar^^[k]^^;
- deletevariable(savename);
- end;
- end;
-
- end;
-
- procedure createamatrix;
-
- label
- 666;
-
- var
- i, j: longint;
- stored: boolean;
- rows, cols: extended;
- freebytes: longint;
-
- begin
-
- stored := false;
- for i := 1 to numvariables do
- begin
- j := numvariables + 1 - i;
- if strvar^^[j]^^ = savename then
- begin
- stored := true;
- deletevariable(savename);
- goto 666;
- end;
- end;
-
- if stored = false then
- begin
- numvariables := numvariables + 1;
- j := numvariables;
- end;
-
- 666:
- matrixstoredinfile^^[j] := false;
- rows := mrows;
- cols := ncols;
- if rows * cols >= bignumber then
- matrixstoredinfile^^[j] := true;
-
- strvar^^[j] := hdlstringsize(NewHandle(SizeOf(stringsize)));
- strvar^^[j]^^ := savename;
-
- if matrixstoredinfile^^[j] then
- begin
- mfilenew^^[j] := true;
- matfile^^[j] := hdlextendedfile(NewHandle(SizeOf(extendedfile)));
- end;
-
- if not matrixstoredinfile^^[j] then
- begin
- matrixnew^^[j] := true;
- blocksize := longint(10 * mrows * ncols + 20);
- storematrix^^[j] := hdlsinglearraymatrix(NewHandle(blocksize));
- end;
-
- kmat := j;
-
- end;
-
-
- procedure readmatrix;
-
- label
- 998;
-
- var
- margin, i, j, k, l, m, n, p, q: longint;
- mrows, ncols: longint;
- dumextended: extended;
- large: boolean;
-
- begin
-
- margin := 90 div decplaceplus10 - 1;
- large := false;
- if numvariables = 0 then
- begin
- writeln('no matrices stored');
- goto 998;
- end;
-
-
- for i := 1 to numvariables do
- begin
- j := numvariables + 1 - i;
- if strvar^^[j]^^ = savename then
- begin
- if matrixstoredinfile^^[j] then
- begin
- if not mfileopen^^[j] then
- begin
- open(matfile^^[j]^^, savename);
- mfileopen^^[j] := true;
- end;
-
- reset(matfile^^[j]^^);
- if eof(matfile^^[j]^^) then
- begin
- writeln('no data in matrix ', savename);
- goto 998;
- end;
-
- read(matfile^^[j]^^, dumextended);
- mrows := round(dumextended);
- read(matfile^^[j]^^, dumextended);
- ncols := round(dumextended);
- if ncols > margin then
- large := true;
- for l := 1 to mrows do
- begin
- if large then
- writeln('row', l : 4);
- for m := 1 to ncols do
- begin
- read(matfile^^[j]^^, dumextended);
- write(dumextended : decplaceplus10 : decplace);
- if large then
- begin
- q := m mod margin;
- if q = 0 then
- write(chr(13));
- end;
- end;
- if large then
- writeln(chr(13))
- else
- writeln;
- end;
-
- if mfileopen^^[j] then
- begin
- close(matfile^^[j]^^);
- mfileopen^^[j] := false;
- end;
- goto 998;
- end;
-
- if not matrixstoredinfile^^[j] then
- begin
-
- n := j;
-
- mrows := round(storematrix^^[n]^^[1]);
- ncols := round(storematrix^^[n]^^[2]);
- if ncols > margin then
- large := true;
-
- p := 2;
- for l := 1 to mrows do
- begin
- if large then
- writeln('row', l : 4);
- for m := 1 to ncols do
- begin
- p := p + 1;
- write(storematrix^^[n]^^[p] : decplaceplus10 : decplace);
- if large then
- begin
- q := m mod margin;
- if q = 0 then
- write(chr(13));
- end;
- end;
- if large then
- writeln(chr(13))
- else
- writeln;
- end;
-
-
- end;
-
- end;
- end;
-
- 998:
- end;
-
-
- procedure readvariables;
-
- label
- 999;
-
- var
- i, m, n, dumlongint: longint;
- dumstring: stringsize;
- dumextended: extended;
- dumboolean: boolean;
-
- begin
-
-
- if not varfileopen then
- begin
- open(varfile, varfilename);
- varfileopen := true;
- end;
-
- reset(varfile);
-
- if eof(varfile) then
- goto 999;
-
- numvariables := 0;
-
- while not eof(varfile) do
- begin
- numvariables := numvariables + 1;
-
- readln(varfile, dumstring);
- strvar^^[numvariables] := hdlstringsize(NewHandle(SizeOf(stringsize)));
- strvar^^[numvariables]^^ := dumstring;
-
- readln(varfile, dumlongint);
-
- readln(varfile, dumboolean);
- matrixstoredinfile^^[numvariables] := dumboolean;
-
- if matrixstoredinfile^^[numvariables] then
- begin
- mfilenew^^[numvariables] := true;
- matfile^^[numvariables] := hdlextendedfile(NewHandle(SizeOf(extendedfile)));
- end;
-
- if not matrixstoredinfile^^[numvariables] then
- begin
- matrixnew^^[numvariables] := true;
-
- readln(varfile, dumextended);
- m := round(dumextended);
- readln(varfile, dumextended);
- n := round(dumextended);
-
- blocksize := longint(10 * m * n + 20);
- storematrix^^[numvariables] := hdlsinglearraymatrix(NewHandle(blocksize));
-
-
- storematrix^^[numvariables]^^[1] := m;
- storematrix^^[numvariables]^^[2] := n;
-
- for i := 1 to m * n do
- begin
- readln(varfile, dumextended);
- storematrix^^[numvariables]^^[i + 2] := dumextended;
- end;
- end;
-
- end;
-
- 999:
- end;
-
-
- procedure listvariables;
-
- var
- i, m, n: longint;
-
- begin
-
- cleanupvariables;
-
- for i := 1 to numvariables do
- begin
- if strvar^^[i]^^ <> '' then
- begin
- if not matrixstoredinfile^^[i] then
- begin
- m := round(storematrix^^[i]^^[1]);
- n := round(storematrix^^[i]^^[2]);
- if (m = 1) and (n = 1) then
- writeln(strvar^^[i]^^, ' ', storematrix^^[i]^^[3] : decplaceplus10 : decplace)
- else
- writeln(strvar^^[i]^^, ' matrix ', m, ' rows, ', n, ' cols ');
- end;
- if matrixstoredinfile^^[i] then
- writeln(strvar^^[i]^^, ' ', i : 5);
- end;
- end;
-
-
- end;
-
-
- procedure storevariables;
-
- var
- i, j, m, n: longint;
- vRefNum: integer;
- name: str255;
- fileinfo: fInfo;
- err: OSErr;
-
- begin
-
- decplace := 20;
- decplaceplus10 := decplace + 10;
-
- if not varfileopen then
- begin
- open(varfile, varfilename);
- varfileopen := true;
- end;
-
- rewrite(varfile);
-
- cleanupvariables;
-
- for i := 1 to numvariables do
- begin
- writeln(varfile, strvar^^[i]^^);
- writeln(varfile, i : 5);
- writeln(varfile, matrixstoredinfile^^[i]);
- if not matrixstoredinfile^^[i] then
- begin
- m := round(storematrix^^[i]^^[1]);
- n := round(storematrix^^[i]^^[2]);
- for j := 1 to m * n + 2 do
- writeln(varfile, storematrix^^[i]^^[j] : decplaceplus10 : decplace);
- end;
- end;
-
- err := GetVol(@name, vRefNum);
- name := varfilename;
- fileinfo.fdFlags := fInvisible;
- err := SetFInfo(name, vRefNum, fileinfo);
-
- end;
-
-
- end.